package com.zhonghui.common.vo;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

@ApiModel("分页")
public class Paging<T> implements Serializable {
    private static final long serialVersionUID = -1683800405530086022L;

    @ApiModelProperty("总行数")
    //@JSONField(name = "total")

    /**
     * 可以作用在属性上，给该属性序列化为另一个名称（别名），主要用来序列化和反序列化；
     * 当前端传json字符串，将会把json字符串反序列化为对象，会自动赋值对应的字段值
     * 当后端接口响应前端对象返回json字符串，将会把对象序列化为json字符串，
     * json字符串的属性名为@JsonProperty指定的名称（别名）
     */
    @JsonProperty("total") //使用 @JsonProperty注解将表结构中的字段映射到实体类中
    private long total = 0;

    @ApiModelProperty("数据列表")
    /**
     * 这两个注解作用是反序列化 输出的形式都是以注解参数的name为名以json的形式输出
     * @JsonProperty 此注解作用于属性上，作用是把该属性的名称序列化成另一个自己想要的名称
     * 对属性名进行重命名，在java里我们墨守规定驼峰命名，但是在一些特殊的场合下，
     * 比如数据库是下划线等，再此我们就可以进行映射
     */
    //@JSONField(name = "records")
    @JsonProperty("records")
    private List<T> records = Collections.emptyList();

    public Paging() {
    }

    public Paging(IPage page) {
        this.total = page.getTotal();
        this.records = page.getRecords();
    }

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public List<T> getRecords() {
        return records;
    }

    public void setRecords(List<T> records) {
        this.records = records;
    }

    @Override
    public String toString() {
        return "Paging{" +
                "total=" + total +
                ", records=" + records +
                '}';
    }

}
